/**
 * 一般的GET请求，无参数
 * @param {String} url 请求地址
 * @param {Function} funSuccess 请求成功的回调
 * @param {() => void} [funComplete=() => {}] 请求结束的回调，默认值空，如需要才传回一个回调函数  
 */
function get(url, funSuccess, funComplete = () => {}){
    uni.request({
        url,
        method: 'GET',
        header:{
            "content-type": "application/json;charset=UTF-8"
        },
        sslVerify: false,
        success: res => {
            funSuccess(res)
        },
        fail: err =>{
            console.log(err);
        },
        complete: () => {
            funComplete()
        }
    });
}
/**
 * 一般的GET请求，无参数
 * @param {String} url 请求地址
 * @param {JSON} header 请求头 包含参数
 * @param {Function} funSuccess 请求成功的回调
 * @param {() => void} [funComplete=() =>{}] 请求结束的回调，默认值空，如需要才传回一个回调函数
 */
function getWithParams(url, header, funSuccess, funComplete = () =>{}){
    uni.request({
        url:url,
        method: 'GET',
        header:header,
        sslVerify: false,
        success: res => {
            funSuccess(res)
        },
        fail: err =>{
            console.log(err);
        },
        complete: () => {
            funComplete()
        }
    });
}

/**
 * 一般的GET请求，无参数
 * @param {String} url 请求地址
 * @param {JSON} data  提交到服务器参数
 * @param {Function} funSuccess 请求成功的回调
 * @param {() => void} [funComplete=() =>{}] 请求结束的回调，默认值空，如需要才传回一个回调函数
 */
function postQuery(url,data,funSucces,funComplete = () =>{}){
	uni.request({
		url:url,
		header:{
			"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
		},
		method:'POST',
		data:data,
     success: res => {
		 funSucces(res)
	 },
	 fail: err =>{
	     console.log(err);
	 },
	 complete: () => {
	     funComplete()
	 }
	});
}

/**
 * post请求 request body 格式json
 * @param {String} url 请求地址
 * @param {JSON} data  提交到服务器参数
 * @param {Function} funSuccess 请求成功的回调
 * @param {() => void} [funComplete=() =>{}] 请求结束的回调，默认值空，如需要才传回一个回调函数
 */
function post(url,data,fuSuccess,funComplete = () =>{}){
	uni.request({
		url: url,
		method: 'POST',
		header:{
			"Content-Type":"application/json;charset=UTF-8"
		},
		data: data,
		success: res => {
			fuSuccess(res)
		},
		fail: err => {
			console.log(err);
		},
		complete: () => {
			funComplete()
		}
	});
}
/**
 * post请求 request body 格式json
 * @param {String} url 请求地址
 * @param {String} name 参数名，默认file
 * @param {String} filePath 上传的本地文件路径，一般由chooseImage提供
 * @param {JSON} data 提交到服务器参数，其他表单数据如用户名，密码...
 * @param {Function} funSuccess 请求成功的回调
 * @param {() => void} [funComplete=() =>{}] 请求结束的回调，默认值空，如需要才传回一个
 */
function postFile(url,name,filePath,data,funSuccess,funComplete = () =>{}){
	uni.uploadFile({
		url,
		filePath,
		name,
		formData: data,
		success: res =>{
			funSuccess(res)
		},
		fail: err =>{
			console.log(err);
		},
		complete:()=>{
			funComplete()
		}
	})
}
/**
 * 同步实现异步请求，在嵌套请求时，async块内代码是同步的，会等待await代码行的执行结果
 * 注意lambda表达式内使用时，async
 */
function request(url,data={},method='GET'){
	return new Promise((resolve,reject) => {
		uni.request({
			url:url,
			method:method,
			data,
			success: res => {
				resolve(res.data)
			},
			fail: err=> {
				reject(err)
			},
			complete: ()=>{}
		})
	})
}
module.exports = {
    get,
    getWithParams,
	postQuery,
	post,
	postFile,
	request
	
}